#ifndef ADCOLLECTOR_H
#define ADCOLLECTOR_H

#include <QObject>
#include <QThread>
#include <QTimer>
#include <QTime>
#include "modbus.h"
//本类开启子线程，在子线程中进行
typedef  struct RecvAdValue
{
    QTime startTime;
    QTime endTime;
    bool isSuccess=false;
    float readValue[8]={0};
} RecvAdValue;
class ADCollector:public QObject
{
    Q_OBJECT
public:
    ADCollector();
    ~ADCollector();
    void StartSignalInit();
    void SignalSlotsInit();
    void SwitchToCurrentValue();
    void SwitchToVotagetValue();
    void OpenPort(QString);                     //发信号打开端口
    RecvAdValue GetCurrentValue();              //供用户调用，在另一个线程中执行
    void StartTimer();                          //供用户调用，在另一个线程中使用
    void StopTimer();
    int GetWorkMode();
    QThread innerCycleCore;
    Modbus  *modBusDevice;
    QTimer *timer=nullptr;
    float getValue[8]={0};
    int testMode=0;                             //0电压模式 1电流模式
signals:
    void NewModbusDevice();
    void PortOpen(QString);                     //发送打开端口的信号
    void Signal_ToShowValue(float *);
    void Signal_ToStartTimer();
    void Signal_ToStopTimer();
    void Signal_ToSwitchToCurrentValue();
    void Signal_ToSwitchToVoltageValue();
    void Signal_ToGetWorkMode(ushort *);        //获取工作模式的信号
    void Signal_ToSendF3(uint8_t, ushort, ushort,ushort *,bool *);
public slots:
    void Slot_ToSwitchToCurrentValue();         //切换到测电流模式（*）
    void Slot_ToSwitchToVoltageValue();         //切换到测电压模式（*）
    void Slot_NewModbusDevice();                //new modbusdevice和new timer的槽函数（*）
    void Slot_PortOpen(QString);                //打开端口的槽函数（*）
    void Slot_TimerTimeout();
    void Stop_Timer();                          //停止定时器槽函数（*）
    void Start_Timer();                         //启动定时器槽函数（*）
    void Slot_GetWorkMode(ushort *);            //获取测量模式槽函数（*）
    void Slot_ToSendF3(uint8_t, ushort, ushort,ushort *,bool *);
};

#endif // ADCOLLECTOR_H
